perm filename BROWSE.LSP[QLA,LSP] blob sn#736904 filedate 1983-12-28 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	 Benchmark to create and browse through an AI-like data base of units
C00008 ENDMK
CāŠ—;
;;; Benchmark to create and browse through an AI-like data base of units

;;; n is # of symbols
;;; m is maximum amount of stuff on the plist
;;; npats is the number of basic patterns on the unit
;;; ipats is the instantiated copies of the patterns

(declare (fixsw t))

(defun init (n m npats ipats)
       (let ((ipats (subst () () ipats)))
	    (do ((p ipats (cdr p)))
		((null (cdr p)) (rplacd p ipats)))
	    (do ((n n (1- n))
		 (i m (cond ((= i 0) m)
			    (t (1- i))))
		 (name (intern (gensym)) (intern (gensym)))
		 (a ()))
		((= n 0) a)
		(push name a)
        	(do ((i i (1- i)))
		    ((= i 0))
           	     (putprop name() (gensym)))
            	(putprop
		 name
		 (do ((i npats (1- i))
		      (ipats ipats (cdr ipats))
		      (a ()))
		     ((= i 0) a)
		     (push (car ipats) a))
		 'pattern)
		(do ((j (- m i) (1- j)))
		    ((= j 0))
           	    (putprop name () (gensym))))))  

(defmacro mod (x n) `(remainder ,x ,n))

(declare (special rand)(fixnum rand))
(setq rand 21.)

(defun seed () (setq rand 21.))

(defun random () (setq rand (mod (* rand 17.) 251.)))

(defun randomize (l)
       (do ((a ()))
	   ((null l) a)
	   (let ((n (mod (random) (length l))))
		(cond ((= n 0)
		       (push (car l) a)
		       (setq l (cdr l)))
		      (t 
		       (do ((n n (1- n))
			    (x l (cdr x)))
			   ((= n 1)
			    (push (cadr x) a)
			    (rplacd x (cddr x)))))))))

(defun char1 (x) (getchar x 1))